﻿Imports WSEntidades
Imports Utilerias
Imports WSDatos

Public Class UbicacionBL
    Public Function RegistrarUbicacion(ByVal TokenConexion As String, ByVal Ubicacion As UbicacionBE, ByRef detResp As DetalleRespuesta) As Boolean
        Dim UbicacionDAL As UbicacionDAL = New UbicacionDAL("")
        detResp.Mensajes = ""
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Registrar, Ubicacion, detResp.Mensajes)) Then
                UbicacionDAL = New UbicacionDAL(TokenConexion)
                If (UbicacionDAL.existeUbicacion(Ubicacion.Clave)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_PreviamenteRegistrado,
                                             "Existe un registro con la clave de la ubicación indicada." & vbCrLf & detResp.Mensajes)
                    Return False
                Else
                    If (UbicacionDAL.registraUbicacion(Ubicacion)) Then
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "La Ubicación se registro con éxito.")
                        Return True
                    Else
                        detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueRegistrado,
                                                 "La Ubicación no pudo ser registrada en el sistema." & vbCrLf & detResp.Mensajes)
                        Return False
                    End If
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La Ubicación no es valida para registrar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "UbicacionBL.RegistrarUbicacion")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al registrar Ubicacion: " & ex.Message)
            Return False
        Finally
            UbicacionDAL = Nothing
        End Try
    End Function

    Private Function EsValidoPara(ByVal tipoOperacion As Enumeraciones.operacionesCatalogos, ByRef Ubicacion As UbicacionBE, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (tipoOperacion = Enumeraciones.operacionesCatalogos.Actualizar) Then
                If (String.IsNullOrEmpty(Ubicacion.IdUbicacion)) Then
                    mensaje &= "El ID de la Ubicación es requerido." & vbCrLf
                Else
                    If (Ubicacion.IdUbicacion < 1) Then
                        mensaje &= "El ID de la Ubicación debe ser mayor a 0, y debe estar previamente registrado en el sistema." & vbCrLf
                    End If
                End If
            End If

            If (String.IsNullOrWhiteSpace(Ubicacion.Clave)) Then
                mensaje &= "La clave de la ubicación es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                Ubicacion.Clave = Ubicacion.Clave.Trim
                If (Ubicacion.Clave.Length > 20) Then
                    Ubicacion.Clave = Ubicacion.Clave.Substring(0, 20)
                End If
            End If
            If (String.IsNullOrWhiteSpace(Ubicacion.Descripcion)) Then
                mensaje &= "La descripcion de la ubicación es obligatoria, no puede ir el campo vacio." & vbCrLf
            Else
                Ubicacion.Descripcion = Ubicacion.Descripcion.Trim
                If (Ubicacion.Descripcion.Length > 80) Then
                    Ubicacion.Descripcion = Ubicacion.Descripcion.Substring(0, 80)
                End If
            End If
            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "UbicacionBL.EsValidoParaRegistrar")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function ActualizaUbicacion(ByVal TokenConexion As String, ByVal Ubicacion As UbicacionBE, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim UbicacionDAL As UbicacionDAL = New UbicacionDAL("")
        Try
            TokenConexion = RijndaelSimple.desencriptaDefault(TokenConexion)
            If (EsValidoPara(Enumeraciones.operacionesCatalogos.Actualizar, Ubicacion, detResp.Mensajes)) Then
                UbicacionDAL = New UbicacionDAL(TokenConexion)
                If (UbicacionDAL.actualizaUbicacion(Ubicacion, detResp.Mensajes)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Datos de Ubicación actualizados.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de Datos de Ubicación." & vbCrLf &
                                             "Verifique que el Id de la Ubicación esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "UbicacionBL.ActualizaUbicacion")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al actualizar Ubicacion: " & ex.Message)
            Return False
        Finally
            UbicacionDAL = Nothing
        End Try
    End Function

    Public Function GetUbicacion(ByVal tokenConexion As String, ByVal IdUbicacion As Integer, ByRef detResp As DetalleRespuesta) As UbicacionBE
        detResp.Mensajes = ""
        Dim UbicacionDAL As UbicacionDAL = New UbicacionDAL("")
        Dim UbicacionBE As UbicacionBE
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetUbicacion(IdUbicacion, detResp.Mensajes)) Then
                UbicacionDAL = New UbicacionDAL(tokenConexion)
                UbicacionBE = UbicacionDAL.getUbicacion(IdUbicacion)
                If (UbicacionBE IsNot Nothing) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "Se obtuvo la información de la Ubicación con éxito.")
                    Return UbicacionBE
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_RegistroInexistenteOInactivo,
                                             "No se obtuvo la información de la Ubicación" & vbCrLf & detResp.Mensajes)
                    Return Nothing
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "El Id de la Ubicación proporcionado contiene valor invalido: " & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "UbicacionBL.GetUbicacion")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener información de la Ubicación: " & ex.Message)
            Return Nothing
        Finally
            UbicacionDAL = Nothing
            UbicacionBE = Nothing
        End Try
    End Function

    Private Function EsValidoParaGetUbicacion(ByRef IdUbicacion As Integer, ByRef mensaje As String) As Boolean
        mensaje = ""
        Try
            If (String.IsNullOrEmpty(IdUbicacion)) Then
                mensaje &= "El campo ID de la Ubicación no puede ir  vacio." & vbCrLf
            Else
                If (IdUbicacion <= 0) Then
                    mensaje &= String.Format("El ID <{0}> de la Ubicación debe ser un valor mayor a 0", IdUbicacion) & vbCrLf
                End If
            End If

            Return (mensaje = "")
        Catch ex As Exception
            Log.LogException(ex, "UbicacionBL.EsValidoParaGetUbicacion")
            mensaje &= ex.Message
            Return False
        End Try
    End Function

    Public Function GetListadoUbicaciones(ByVal tokenConexion As String, ByVal estatus As Enumeraciones.estatusParaBusquedas,
                                          ByRef detResp As DetalleRespuesta) As List(Of UbicacionBE)
        detResp.Mensajes = ""
        Dim UbicacionDAL As UbicacionDAL = New UbicacionDAL("")
        Dim listUbicacionBE As List(Of UbicacionBE)
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            UbicacionDAL = New UbicacionDAL(tokenConexion)
            listUbicacionBE = UbicacionDAL.getListadoUbicacion(estatus)
            If (listUbicacionBE IsNot Nothing) Then
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK, "Se obtuvo el listado de Ubicaciones con éxito.")
                Return listUbicacionBE
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoObtuvoRegistrosParaListado,
                                         "No se obtuvo el listado de Ubicaciones" & vbCrLf & detResp.Mensajes)
                Return Nothing
            End If
        Catch ex As Exception
            Log.LogException(ex, "UbicacionBL.GetListadoUbicaciones")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al obtener el listado de Ubicaciones: " & ex.Message)
            Return Nothing
        Finally
            UbicacionDAL = Nothing
            listUbicacionBE = Nothing
        End Try
    End Function

    Function CambiaEstatus(ByVal tokenConexion As String, ByVal Id As Integer, ByVal setActivo As Boolean, ByRef detResp As DetalleRespuesta) As Boolean
        detResp.Mensajes = ""
        Dim UbicacionDAL As UbicacionDAL = New UbicacionDAL("")
        Try
            tokenConexion = RijndaelSimple.desencriptaDefault(tokenConexion)
            If (EsValidoParaGetUbicacion(Id, detResp.Mensajes)) Then
                UbicacionDAL = New UbicacionDAL(tokenConexion)
                If (UbicacionDAL.cambiaStatus(Id, setActivo)) Then
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ProcesamientoOK,
                                             "Estatus de Ubicación actualizados.")
                    Return True
                Else
                    detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.Catalogo_NoFueActualizado,
                                             "No se pudo realizar la actualización de estatus de Ubicación." & vbCrLf &
                                             "Verifique que el Id de la Ubicación esté registrado en el sistema." & vbCrLf & detResp.Mensajes)
                    Return False
                End If
            Else
                detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ValoresInvalidos,
                                         "La informacion no es valida para actualizar: " & vbCrLf & detResp.Mensajes)
                Return False
            End If
        Catch ex As Exception
            Log.LogException(ex, "UbicacionBL.CambiaEstatus")
            detResp.estableceValores(DetalleRespuesta.CodigoRespuesta.ExcepcionEnOperacion,
                                        detResp.Mensajes & "Excepción al actualizar estatus de Ubicacion: " & ex.Message)
            Return False
        Finally
            UbicacionDAL = Nothing
        End Try
    End Function

End Class
